package net.yeah.mickey_zhouyou.database.domain;

import java.util.Date;

import net.yeah.mickey_zhouyou.database.exception.DBInitException;
import net.yeah.mickey_zhouyou.database.status.DBStatus;

/**
 * 所有表的公共超类。
 * 
 * @author Mickey
 * 
 */
public abstract class BaseTable implements Cloneable {

	/**
	 * 是否有效。 此数据只在保存历史版本时做为标志位使用
	 * 
	 * @see net.yeah.mickey_zhouyou.database.file_manage.util.ConfigProperties.save_history_version
	 */
	private boolean isValid = true;
	/**
	 * 数据版本时间， 每当创建时或保存时，这个时间都会更新。
	 */
	private Date versionTm = new Date();

	public Date getVersionTm() {
		return versionTm;
	}

	public boolean isValid() {
		return isValid;
	}

	@Override
	public final BaseTable clone() {
		try {
			return (BaseTable) super.clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return null;
	}

	{
		// 如果数据库没有初始化完成，则不能创建实体
		if (DBStatus.getCurrentStatus().equals(DBStatus.Status.NOT_INIT))
			throw new DBInitException();
	}

}
